package com.layui.ad.utils;


import com.layui.ad.vo.SysMenuVo;

import java.util.ArrayList;
import java.util.List;

public class TreeUtil {
    public static List<SysMenuVo> tree(List<SysMenuVo> menuList){
        List<SysMenuVo> rootMenu = new ArrayList<>();
        for (SysMenuVo nav : menuList) {
            if (nav.getParentId().equals(0)) {//父节点是0的，为根节点。
                rootMenu.add(nav);
            }
        }
        //为根菜单设置子菜单，getClild是递归调用的
        for (SysMenuVo nav : rootMenu) {
            /* 获取根节点下的所有子节点 使用getChild方法*/
            List<SysMenuVo> childList = getChild(nav.getId(), menuList);
            nav.setChildren(childList);//给根节点设置子节点
        }
        return rootMenu;
    }

    public static List<SysMenuVo> getChild(Integer id, List<SysMenuVo> menuList) {
        //子菜单
        List<SysMenuVo> childList = new ArrayList<>();
        for (SysMenuVo nav : menuList) {
            // 遍历所有节点，将所有菜单的父id与传过来的根节点的id比较
            //相等说明：为该根节点的子节点。
            if (nav.getParentId().equals(id)) {
                childList.add(nav);
            }
        }
        //递归
        for (SysMenuVo nav : childList) {
            nav.setChildren(getChild(nav.getId(), menuList));
        }
//            Collections.sort(childList,order());//排序
        //如果节点下没有子节点，返回一个空List（递归退出）
        if (childList.size() == 0) {
            return new ArrayList<SysMenuVo>();
        }
        return childList;
    }
}
